package api

import (
	"Im/dto"
	"Im/global"
	"Im/service"
	"Im/utils"
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
	"strconv"
	"time"
)

// 聊天上传图片的接口
// @Tags Public
// @Summary 上传图片
// @Description 聊天上传图片接口
// @Accept x-www-form-urlencoded
// @Success      200  {object} dto.RepImg
// @Router /uploadImg [post]
func UploadImg(c *gin.Context) {
	//从接口中获取上传的文件
	file, err := c.FormFile("file")
	if err != nil {
		return
	}
	//获取文件的输入流
	file2, _ := file.Open()
	demo := strconv.FormatInt(time.Now().Unix(), 10)
	//调用函数压缩图片,用时间戳给图片命名，防止命名重复
	utils.ImgCompress(file2, demo+file.Filename)
	Res(c, http.StatusOK, Response{
		Code: "200",
		Msg:  "上传成功",
		Data: gin.H{
			"url": "/static/img/" + demo + file.Filename,
		},
	})
}

// @Tags User
// @Summary 发送邮箱验证码
// @Description 验证码的接口
// @Accept  json
// @Param email body string true "用户邮箱"
// @Router /send/code [post]
func SendCode(c *gin.Context) {
	var uDto dto.UserRegistration
	err := c.ShouldBindJSON(&uDto)
	if err != nil {
		c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
			"msg": err.Error(),
		})
		return
	}
	//到这表示前端传来的参数验证通过了
	err = service.Email(uDto.Email)
	if err == nil {
		//报错了就是没找到有相同邮箱的用户,没报错就是找到了有相同邮箱的用户
		c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
			"msg": "该邮箱已被注册，请更换。",
		})
		return
	}
	//接下来要做的就是给用户发送邮箱验证码
	emailCode := utils.GetCode()
	//将验证码保存到一个全局map当中去
	global.EmailCode[uDto.Email] = emailCode
	go func() {
		err = utils.SendCode(uDto.Email, global.EmailCode[uDto.Email])
		if err != nil {
			fmt.Println(err.Error())
			//panic("邮箱验证码发送错误")
			return
		}
	}()
	//c.AbortWithStatusJSON(http.StatusOK, gin.H{
	//	"msg":  "验证码已发送，请注意查收",
	//	"data": global.EmailCode,
	//})
	Res(c, http.StatusOK, Response{
		Code: "200",
		Msg:  "验证码已发送，请注意查收",
		Data: global.EmailCode,
	})
}
